#ifndef __LOCAL_SEARCH_CONSTRUCT_GREADY_RANDOMIZED_HH__
#define __LOCAL_SEARCH_CONSTRUCT_GREADY_RANDOMIZED_HH__

#include "graph.hh"

int LocalSearchNeighborhoodRandomly(Graph * G_problem, int k, Graph *& G_sol, PathMatrix *& P_sol, double alpha, double beta, int max_iter);
list< pair<Graph*, PathMatrix*> * > * NeighborhoodByEliminatingEdges(Graph * G_problem, Graph * G_sol, PathMatrix * P_sol,  int k, double alfa, int max_iter);
list< pair<Graph*, PathMatrix*> * > * NeighborhoodByEliminatingNodes(Graph * G_problem, Graph * G_sol, PathMatrix * P_sol, int k, double beta, int max_iter);


pair<Graph*, PathMatrix*> * RemoveOptionalNodesFromRelatedComponentOfOptionals(Graph * G, PathMatrix * P, double alfa);
pair<Graph*, PathMatrix*> * RemoveEdgesFromRelatedComponentOfTerminals(Graph * G, PathMatrix * P, double alfa);

list<int> * GetNodesOfComponentRelated(Graph * G, int node);
list<pair<int,int> * > * GetEdgesOfComponentRelated(Graph * G, int node);

#endif  
